/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.ufps.cuatro.modelo.asistente.espejo.complejo.wizard;

import com.ufps.cuatro.controlador.render.UtilRender;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;

import com.ufps.cuatro.modelo.analizador.ObjetoReflexion;
import com.ufps.cuatro.modelo.representacion.componente.ComponenteDistribuidorIntegrador;
import com.ufps.cuatro.modelo.representacion.componente.ComponenteDistribuidorIntegradorMetodo;
import com.ufps.cuatro.util.wizard.ObjectTempSwapWizard;
import com.ufps.cuatro.util.wizard.UtilWizard;
import com.ufps.cuatro.util.wizard.WizardPanelDescriptor;
import com.ufps.cuatro.vistas.asistente.espejo.complejo.wizard.JPanelWizardEspejoStandardSelectConfigFinish;
import com.ufps.cuatro.vistas.asistente.espejo.complejo.wizard.JPanelWizardEspejoStandardSelectElements;

/**
 *
 * @author Carlos A. Torres C. 
 */
public class JPanelWizardEspejoStandardSelectConfigFinishDescriptor extends WizardPanelDescriptor  implements ActionListener {
    
    public static final String IDENTIFIER = "SELECT_CONFIG_FINISH";
    private JPanelWizardEspejoStandardSelectConfigFinish objPanel;
    
    public JPanelWizardEspejoStandardSelectConfigFinishDescriptor() {        
//       if(objPanel != null){
            objPanel = new JPanelWizardEspejoStandardSelectConfigFinish();
            objPanel.addCheckBoxActionListener(JPanelWizardEspejoStandardSelectConfigFinishDescriptor.this);

            setPanelDescriptorIdentifier(IDENTIFIER);
            setPanelComponent(objPanel);
//        }else{
//                UtilRender.printlnConsole("Objeto Panel Nulo.", UtilRender.ACTION_NORMAL, false);            
//            }
    }

    @Override
    public void displayingPanel() {     
//       try{
            JPanelWizardEspejoStandardSelectElementsDescriptor objPanelDescriptor = (JPanelWizardEspejoStandardSelectElementsDescriptor) this.getWizardModel().getPanelDescriptor(JPanelWizardEspejoStandardSelectElementsDescriptor.IDENTIFIER);
            JPanelWizardEspejoStandardSelectElements objTempPanel = (JPanelWizardEspejoStandardSelectElements) objPanelDescriptor.getPanelComponent();
            ArrayList<ObjetoReflexion> objElementos = objTempPanel.getObjElementos();
            JPanelWizardEspejoStandardSelectConfigFinish objPanelActual = (JPanelWizardEspejoStandardSelectConfigFinish) this.getPanelComponent();
            objPanelActual.setObjElementos(objElementos);
//        }catch(java.lang.NullPointerException ex){}
    }
    
    @Override
    public Object getNextPanelDescriptor() {
        return JPanelWizardEspejoStandardSelectConfigFinishDescriptor.FINISH;
    }
    
    @Override
    public Object getBackPanelDescriptor() {
        return JPanelWizardEspejoStandardSelectElementsDescriptor.IDENTIFIER;
    }
    
    @Override
    public void aboutToDisplayPanel() {
//       try{
            setNextButtonAccordingToCheckBox();
//        }catch(java.lang.NullPointerException ex){}
    }    
    
    public void actionPerformed(ActionEvent e) {
//       try{
            setNextButtonAccordingToCheckBox();
//        }catch(java.lang.NullPointerException ex){}
    }            
    
    private void setNextButtonAccordingToCheckBox() {
         if (objPanel.isCheckBoxSelected()){
             if(objPanel.isListEmpty() && objPanel.getObjElementos().isEmpty()){
                 UtilRender.msgAdvertencia("No puede generar un Componente Vacio.", objPanel);
                 objPanel.getjCheckBoxConfirmar().setSelected(false);
                 return;
             }
             getWizard().setNextFinishButtonEnabled(true);
             procesarConfiguracion();
         }
         else{
             getWizard().setNextFinishButtonEnabled(false);             
         }           
    }     
    
    private void procesarConfiguracion() {        
        ArrayList<ComponenteDistribuidorIntegrador> objComponentesIntegradores = objPanel.getObjComponentesIntegradores();        
        for(ComponenteDistribuidorIntegrador obj : objComponentesIntegradores){
            if(obj instanceof ComponenteDistribuidorIntegradorMetodo){
                ComponenteDistribuidorIntegradorMetodo p = (ComponenteDistribuidorIntegradorMetodo) obj;
                if(!p.isAddReturn()){
                    p.eliminarReturn();
                }
            }
        }
        ObjectTempSwapWizard objSwap = new ObjectTempSwapWizard(UtilWizard.WIZARD_ASISTENTE_ESPEJO_STANDARD);                
        objSwap.add(ObjectTempSwapWizard.COLECCION, objComponentesIntegradores);
        UtilWizard.objTempSwap = objSwap;
        System.out.println("Configuración Procesada en el Objeto de Intercambio....");
    }
    
}
